Keynote - Łukasz Langa (PyCon US 2022)
型ヒントは人間のためのもの(ドキュメンテーション)
人が読み、型チェッカも読む
型チェッカとの戦いではない
型ヒントで表した仮定を型チェッカーがチェックしてくれる
醜いコードには醜い型ヒントがある(ugly type annotations hint at ugly code)
型ヒントが醜かったらリファクタリングを考えよう(if your types are ugly consider refactoring)
読みやすい型ヒントについて共有
use modern typing syntax
3.9 組み込みgeneric型(typing.Listでなくてlistを使う)
3.10 Unionが | で書ける
standardize signature formatting
人にとって型ヒントを読みやすく
dispatch early to specialize
早期にdispatchし、サブファンクションを呼び出す
be flexible in what you accept but strict in what you emit
引数の型ヒントはvague
list? -> Iterableかも(tupleも渡せる)
返り値の型ヒントはconcrete
listを返す
But you should bend the rules
ジェネレータ関数の型ヒントはIterator[Foo]
ファイルライクオブジェクトの型ヒントはIO[Text]
mismatch
one variable one type
同じタイプを再代入
型が違うなら新しい変数にする
読みやすくなり、デバッグもしやすくなる
nominal vs structural typing
structural:Pythonのダックタイピング
nominalにもよさはある
TODO 単なるstringもIterable[str]
object vs Any
Further reading
TypedDict
NewType(2つの変数がstrを指していても型チェッカは同じでないと認識する)
Protocols
Self type
Varlance in collections (LT 5minで)
Liskov Substitution Principles(リスコフの置換原則)
https://youtu.be/wbohVjhqg7c